package com.cn.demo4.service.impl;

import com.cn.demo4.dao.ProductDao;
import com.cn.demo4.dao.impl.ProductDaoImpl;
import com.cn.demo4.model.ProductModel;
import com.cn.demo4.service.IProductService;
import com.cn.demo4.util.Tool;
import redis.clients.jedis.Jedis;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Administrator
 */
public class ProductServiceImpl implements IProductService {
    @Override
    public List<ProductModel> findAll(ProductModel productModel) {
        ProductDao ProductDao = new ProductDaoImpl();
        return ProductDao.findAll(productModel);
    }

    @Override
    public String add(ProductModel productModel) {
        ProductDao productDao = new ProductDaoImpl();
        int result = productDao.add(productModel);
        if(result == 1){
            Jedis jedis = new Jedis( );
            jedis.del("productId");
            jedis.del("productStatus");
            jedis.del("productNavImg");
            jedis.del("productName");
            jedis.del("productHouseName");
            jedis.del("productImg");
            jedis.del("productDescription");
        }

        return result == 1 ? "success" : "error";
    }

    @Override
    public int del(Integer id) {
        ProductDao productDao = new ProductDaoImpl();
        int result = productDao.del(id);
        if(result == 1){
            Jedis jedis = new Jedis( );
            jedis.del("productId");
            jedis.del("productStatus");
            jedis.del("productNavImg");
            jedis.del("productName");
            jedis.del("productHouseName");
            jedis.del("productImg");
            jedis.del("productDescription");
        }

        return result;
    }

    @Override
    public ProductModel findById(Integer id) {
        ProductDao productDao = new ProductDaoImpl();
        return productDao.findById(id);
    }

    @Override
    public String update(ProductModel productModel) {
        ProductDao productDao = new ProductDaoImpl();
        int result = productDao.update(productModel);
        if(result == 1){
            Jedis jedis = new Jedis( );
            jedis.del("productId");
            jedis.del("productStatus");
            jedis.del("productNavImg");
            jedis.del("productName");
            jedis.del("productHouseName");
            jedis.del("productImg");
            jedis.del("productDescription");
            //删除当前数据库中的所有数据
            //jedis.flushDB();
        }
        return result == 1 ? "success" : "error";
    }

    @Override
    public int getCount(ProductModel productModel) {
        ProductDao productDao = new ProductDaoImpl();
        return productDao.getCount(productModel);
    }

    @Override
    public List<ProductModel> getProductModelListForHome() {
        List<ProductModel> list = new ArrayList<>();
        Jedis jedis = new Jedis();
        ProductDao ProductDao = new ProductDaoImpl();
        Boolean exists = jedis.exists("productId");
        if (exists) {
            List<String> productIdList = jedis.lrange("productId", 0, -1);
            for(int i =0 ; i< productIdList.size(); i++){
                ProductModel productModel= new ProductModel();
                productModel.setId(Tool.stringToInt(jedis.lindex("productId",i)));
                productModel.setStatus(Tool.stringToInt(jedis.lindex("productStatus",i)));
                productModel.setNavImg(jedis.lindex("productNavImg",i));
                productModel.setName(jedis.lindex("productName",i));
                productModel.setHouseName(jedis.lindex("productHouseName",i));
                productModel.setImg(jedis.lindex("productImg",i));
                productModel.setDescription(jedis.lindex("productDescription",i));
                list.add(productModel);
            }
        } else {
            //将数据存入缓存中
            list = ProductDao.getProductModelListForHome();
            for(int i=0; i < list.size();i++){
                jedis.rpush("productId",Integer.toString(list.get(i).getId()));
                jedis.rpush("productStatus",Integer.toString(list.get(i).getStatus()));
                if(list.get(i).getNavImg() != null){
                    jedis.rpush("productNavImg",list.get(i).getNavImg());
                }
                if(list.get(i).getName() != null ){
                    jedis.rpush("productName",list.get(i).getName());
                }
                jedis.rpush("productHouseName",list.get(i).getHouseName());
                if(list.get(i).getImg() != null){
                    jedis.rpush("productImg",list.get(i).getImg());
                }
                if(list.get(i).getDescription() != null){
                    jedis.rpush("productDescription",list.get(i).getDescription());
                }
            }
        }
        return list;
    }


}
